#ifndef __IIC_H__
#define __IIC_H__

#include <stdbool.h>
#include <stdint.h>

typedef struct
{
    void (*wrsda)(bool);
    void (*wrscl)(bool);
    bool (*rdsda)(void);
    void (*dlyus)(uint32_t);
} iic_iodrv_t;
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION < 6000000)
#pragma anon_unions
#endif
typedef struct
{
    uint32_t bps;
    struct
    {
        uint32_t inited : 1;
        uint32_t ioinited : 1;
        uint32_t reserved : 30;
    };
    iic_iodrv_t io;
} iic_t;

// IIC所有操作函数
int32_t iic_init(iic_t *p); // 初始化iic的io口
int32_t iic_regsiter(iic_t *p, iic_iodrv_t *pdrv);
int32_t iic_start(iic_t *p);                                 // 发送iic开始信号
int32_t iic_stop(iic_t *p);                                  // 发送iic停止信号
int32_t iic_send_byte(iic_t *p, uint8_t txd);                // iic发送一个字节
int32_t iic_read_byte(iic_t *p, uint8_t *rbuf, uint8_t ack); // iic读取一个字节
int32_t iic_wait_ack(iic_t *p);                              // iic等待ack信号
int32_t iic_ack(iic_t *p);                                   // iic发送ack信号
int32_t iic_nack(iic_t *p);                                  // iic不发送ack信号

#endif
